/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sisvoto.Utiles;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import sisvoto.DAO.ConsultasBD;
import sisvoto.modelo.Eleccion;
import sisvoto.modelo.EleccionElector;
import sisvoto.modelo.EleccionListas;
import sisvoto.modelo.ListaVoto;
import sisvoto.modelo.VotoElectoral;
import sisvoto.vista.Result;


/**
 *
 * @author Dianita
 */
public class MetodoConteo {

    Result resultados;
    long votoblanco;
    long votonulo;
    long votovalido;
    long nrolistas;
    long nrototelectores;
    long nroelectoressi;
    long nroelectoresno;

    public MetodoConteo(Result resultados) {
        this.votoblanco = 0;
        this.votonulo = 0;
        this.votovalido = 0;
        this.nrolistas = 0;
        this.nrototelectores=0;
        this.resultados=resultados;
    }
    
    //INDICE 0=BLANCOS
    ArrayList<Integer> cantidades = new ArrayList<>();
    //ESPECIFICA AL CANDIDATO CON MAYOR CANTIDAD DE VOTOS COMO GANADOR

    public ArrayList<ListaVoto> metodoCondorcet(Eleccion eleccion) {
        ArrayList<VotoElectoral> votos = (ArrayList<VotoElectoral>) new ConsultasBD().buscarPOR("VotoElectoral", "eleccion", "'" + eleccion.getId() + "'");
        nrolistas = new ConsultasBD().ContadorRegistrosPersonalizado("SELECT COUNT(elecciones) FROM EleccionListas AS elecciones WHERE eleccion='" + eleccion.getId() + "'");
        nrototelectores = new ConsultasBD().ContadorRegistrosPersonalizado("SELECT COUNT(elecciones) FROM EleccionElector AS elecciones WHERE eleccion='" + eleccion.getId() + "'");
        nroelectoressi = new ConsultasBD().ContadorRegistrosPersonalizado("SELECT COUNT(elecciones) FROM VotantesEleccion AS elecciones WHERE eleccion='" + eleccion.getId() + "'");
        nroelectoresno = nrototelectores-nroelectoressi;
        if (!votos.isEmpty()) {
            //contarvotos(votos);
            this.votoblanco= new ConsultasBD().ContadorRegistrosPersonalizado("SELECT COUNT(voto) FROM VotoElectoral WHERE eleccion = '"+eleccion.getId()+"' AND voto = 'BLANCO'"); 
            this.votonulo= new ConsultasBD().ContadorRegistrosPersonalizado("SELECT COUNT(voto) FROM VotoElectoral WHERE eleccion = '"+eleccion.getId()+"' AND voto = 'NULO'"); 
            this.votovalido= new ConsultasBD().ContadorRegistrosPersonalizado("SELECT COUNT(voto) FROM VotoElectoral WHERE eleccion = '"+eleccion.getId()+"' AND voto <> 'BLANCO'  AND voto <> 'NULO'"); 
            //SE OBTIENEN TODOS LOS VOTOS
           
            ArrayList<ListaVoto> result = new ConsultasBD().buscarPersonalizado("SELECT DISTINCT(COUNT(v.voto)) AS nrovoto, v.voto FROM VotoElectoral v WHERE v.eleccion = '"+eleccion.getId()+"' GROUP BY v.voto ORDER BY COUNT(v.voto) DESC ");
            // SI DESEO OBTENER SOLO LOS VOTOS VÁLIDOS
            //ArrayList<ListaVoto> result = new ConsultasBD().buscarPersonalizado("SELECT DISTINCT(COUNT(voto)) AS nrovoto, voto FROM VotoElectoral WHERE eleccion = '"+eleccion.getId()+"' AND voto <> 'BLANCO' AND voto <> 'NULO' GROUP BY voto");
            resultados.getTxtelectoresno().setText(String.valueOf(nroelectoresno));
            resultados.getTxtelectoressi().setText(String.valueOf(nroelectoressi));
            resultados.getTxtlistas().setText(String.valueOf(nrolistas));
            resultados.getTxttotalelectores().setText(String.valueOf(nrototelectores));
            resultados.getTxtvotosblancos().setText(String.valueOf(votoblanco));
            resultados.getTxtvotosnulos().setText(String.valueOf(votonulo));
            resultados.getTxtvotosvalidos().setText(String.valueOf(votovalido));
            
            for(ListaVoto l : result){
                System.out.println(l.getIdpartido()+"="+l.getVotos());
            }
            
            return result;
        } else {
            new Mensajes().StandarWarning(null, "No Existen Votos En Ésta Elección");
            return null;
        }
    }

    //DENOMINA AL GANADOR DE ACUERDO AL 50%+1
    private void metodoVUT() {
    }

    
    /* METODO AUXILIAR DE CONTEO DE VOTOS
    private void contarvotos(ArrayList<VotoElectoral> votos) {

        int contador = 0;
        Integer voto = 0;
        ListaVoto lista = null;
        Map mapa = new HashMap();

        for (VotoElectoral votoElectoral : votos) {
            if (votoElectoral.getVoto().equals("NULO")) {
                this.votonulo = this.votonulo + 1;
            } else {
                if (votoElectoral.getVoto().equals("BLANCO")) {
                    this.votoblanco = this.votoblanco + 1;
                } else {
                    this.votovalido = this.votovalido + 1;
                    if (mapa.containsKey(votoElectoral.getVoto())) {
                        int vto = Integer.parseInt(String.valueOf(mapa.get(votoElectoral.getVoto())));
                        vto = vto + 1;
                        mapa.put(votoElectoral.getVoto(), vto);
                    } else {
                        mapa.put(votoElectoral.getVoto(), 1);
                    }
                }
            }
        }


        Iterator it = mapa.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry e = (Map.Entry) it.next();
            System.out.println(e.getKey() + " " + e.getValue());
        }
    }
*/
    
    
   
}